#include<bits/stdc++.h>
using namespace std;
int m,n,k,km,state[110][15],z[15],f[110][100010],ans[110][100010],zans;
char op;
void dfs(int x)
{
	if(x==m)
	{
		if(!z[x-2]&&!z[x-1]&&state[1][x])
		{
			++k,z[x]=1;
			for(int i=1; i<=m; ++i)
			{
				f[1][k]=(f[1][k]<<1)+z[i];
				if(z[i]) ++ans[1][k];
			}
		}
		z[x]=0,++k;
		for(int i=1; i<=m; ++i)
		{
			f[1][k]=(f[1][k]<<1)+z[i];
			if(z[i]) ++ans[1][k];
		}
		return;
	}
	if(!z[x-2]&&!z[x-1]&&state[1][x]) 
		z[x]=1,dfs(x+1),z[x]=0;
	dfs(x+1);
	return;
}
void dfss(int v,int p,int x)
{
	if(x==m)
	{
		if(!z[x-2]&&!z[x-1]&&state[v][x]&&!((f[v-1][p]>>(m-x))&1)&&!((f[v-2][p]>>(m-x))&1))
		{
			++km,z[x]=1,ans[v][km]+=ans[v-1][p];
			for(int i=1; i<=m; ++i)
			{
				f[v][km]=(f[v][km]<<1)+z[i];
				if(z[i]) ++ans[v][km];
			}
//			cout<<v<<" "<<ans[v][km]<<" ";
		}
		z[x]=0,++km,ans[v][km]+=ans[v-1][p];
		for(int i=1; i<=m; ++i)
		{
			f[v][km]=(f[v][km]<<1)+z[i];
			if(z[i]) ++ans[v][km];
		}
//		cout<<v<<" "<<ans[v][km]<<" ";
		return;
	}
	if(!z[x-2]&&!z[x-1]&&state[v][x]&&!((f[v-1][p]>>(m-x))&1)&&!((f[v-2][p]>>(m-x))&1)) 
		z[x]=1,dfss(v,p,x+1),z[x]=0;
	dfss(v,p,x+1);
	return;
}
int main()
{
	cin>>n>>m;
	for(int i=1; i<=n; ++i)
		for(int j=1; j<=m; ++j)
			cin>>op,state[i][j]= (op=='P')? 1:0;
	dfs(1);
//	for(int i=1; i<=k; ++i) cout<<f[1][i]<<endl;
//	for(int i=1; i<=k; ++i) cout<<ans[1][i]<<" ";cout<<endl;
	for(int i=2; i<=n; ++i)
	{
		for(int p=1; p<=k; ++p)
			dfss(i,p,1);
		k=km,km=0;
//		cout<<endl;
//		if(i==5) for(int j=1; j<=k; ++j) cout<<ans[2][j]<<" ";cout<<endl;
	}
	for(int i=1; i<=k; ++i) zans=max(zans,ans[n][i]);
	cout<<zans-1<<endl;
}
